// interface Lengthwise {
//   length: number
// }
// function loggingIdentity<T extends Lengthwise>(arg: T): T {
//   console.log(arg.length)
//   return arg
// }

// loggingIdentity(7)

// function copyFields<T extends U, U>(target: T, source: U): T {
//   for (let id in source) {
//     target[id] = (<T>source)[id]
//   }
//   return target
// }

// let x = { a: 1,b:2, c: 3, d: 4 }

// copyFields(x, { b: 10, d: 20 })
// interface CreateArrayFunc<T> {
//   (length: number, value: T): Array<T>
// }

// let createArray: CreateArrayFunc<string>
// createArray = function <T>(length: number, value: T): Array<T> {
//   let result: T[] = []
//   for (let i = 0; i < length; i++) {
//     result[i] = value
//   }
//   return result
// }

// createArray(3, 'x') // ['x', 'x', 'x']
// createArray(3, 1) // ['x', 'x', 'x']

// class GenericNumber<T> {
//   zeroValue: T
//   add: (x: T, y: T) => T
// }

// let myGenericNumber = new GenericNumber<number>()
// myGenericNumber.zeroValue = 0
// myGenericNumber.add = function (x, y) {
//   return x + y
// }

// myGenericNumber.add('1', '2')

function createArray<T = string>(value: T): T {
  return value
}

createArray()

// createArray<number>(1, '123')
